package com.atguigu.sql.data.hive

import com.atguigu.sql.util.MySparkSessionUtil
import org.apache.spark.sql.{DataFrame, Dataset, SparkSession}

/**
 * description ：从hive中读取
 * author      ：剧情再美终是戏 
 * mail        : 13286520398@163.com
 * date        ：Created in 2020/1/12 20:54
 * modified By ：
 * version:    : 1.0
 */
object HiveDemo {

  def main(args: Array[String]): Unit = {


    System.setProperty("HADOOP_USER_NAME", "atguigu") // 设置hdfs访问用户
    val param: Array[String] = Array("spark.sql.catalogImplementation::hive") // sparkSession开启hive支持

    // 获取 sparkSession
    val spark: SparkSession = MySparkSessionUtil.get(param)

    // 创建rdd
    import spark.implicits._
    val rdd = spark.sparkContext.parallelize(stu(88, "80") :: stu(90, "81") :: Nil, 1)
    val df: DataFrame = rdd.toDF
    val ds: Dataset[stu] = rdd.toDS()

    // TODO 1、从hive中读取数据
    spark.sql("show databases").show()
    spark.sql("use default")
    //    spark.sql("show tables").show()
    //    spark.sql("select * from student").show()

    // TODO 2.1、写入数据 sql直接写入
    //    spark.sql("create table student2(id int, name string)")
    spark.sql("insert into table student3 values(2, 'wangwu')")

    // error TODO 2.2、写入数据  df --> hive
    //    df.write.mode(SaveMode.Append).saveAsTable("student3")

    //  TODO 2.3、写入数据  df --> temptable ->  hive

    //    df.createOrReplaceTempView("stu")
    //    spark.sql("insert into table student select * from stu")

    // error TODO 2.4、写入数据  ds --> hive

    //    ds.write.mode(SaveMode.Append).saveAsTable("student")

    spark.sql("select * from student3").show()

    // TODO saveAsTable第一次使用的时候一定要表不存在，由saveAsTable这个api去触发创建，以后就可以一直使用
    // TODO　由saveAsTable创建的表，在hive中是查询不到数据的

    // 关闭 sparkSession 资源
    MySparkSessionUtil.close(spark)
  }

  case class stu(id: Int, name: String) extends Serializable

}
